﻿#pragma once

#include "MathOperation.h"

namespace ASL
{

    // 通用执行机构模型
    class ASL_API Actuator
    {
    public:
        // 构造函数
        Actuator();

        // 析构函数
        ~Actuator();

        // 初始化函数
        // 输入 stepSize 仿真步长 s
        // 返回 return 执行状态 -
        bool initialize(double stepSize);

        // 单步运行函数
        // 输入 -
        // 返回 return 执行状态 -
        bool step(void);

    public:
        // 输入端口列表
        struct Input
        {
            // 伺服控制信号 -
            double u;
        };

        // 输出端口列表
        struct Output
        {
            // 伺服偏转信号 -
            double y;
        };

        // 参数端口列表
        struct Parameter
        {
            // 初始位置 -
            double initialPosition;

            // 比例系数 -
            double k;

            // 位置范围 - [min, max]
            double positionRange[2];

            // 速率范围 -/s [min, max]
            double rateRange[2];
        };

    public:
        // 输入端口对象
        Actuator::Input input;

        // 输入端口对象
        Actuator::Output output;

        // 参数端口对象
        Actuator::Parameter parameter;

    private:
        // 积分器
        ASL::Calculus vG;
    };

}